package controllers.image;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.imageio.ImageIO;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

import play.Play;
import play.cache.Cache;
import play.mvc.Controller;

public class ImageAction {
	
	/**
	 * http客户端。
	 */
	private static DefaultHttpClient httpClient;
	
	/**
	 * 线程数目。
	 */
	private static final int threadCount = 10;
	/**
	 * 线程池服务。
	 */
	private static ExecutorService executorService;
	
	/**
	 * 构造线程池。
	 */
	static{
		executorService = Executors.newFixedThreadPool(threadCount);
	}
	/**
	 * 上传图片的处理方法。
	 * 目前只支持单个文件的上传。
	 * @param image 上传的图片文件。
	 * @throws Exception 
	 */
	public static boolean upload(File image,String path) throws Exception{
		//获得上传的文件后缀名。
		String suffix = getSuffix(image.getName());
		//获得完整的上传图片路径。
		String fileName = getFilePath(suffix,path);
		//获得又拍云对象。
		UpYun upYun = UpYunFactory.createUpYunForFile();
		//以自动创建目录的方式上传图片。
		boolean result = upYun.writeFile(fileName, image, Boolean.TRUE);
		return result;
	}
	
	/**
	 * 上传图片的处理方法。
	 * 目前只支持单个文件的上传。返回图片名称
	 * @param image
	 * @throws Exception 
	 */
	public static String uploadReName(File image,String path) throws Exception{
		//获得上传的文件后缀名。
		String suffix = getSuffix(image.getName());
		//获得完整的上传图片路径。
		String fileName = getFilePath(suffix,path);
		//获得又拍云对象。
		UpYun upYun = UpYunFactory.createUpYunForFile();
		//以自动创建目录的方式上传图片。
		boolean result = upYun.writeFile(fileName, image, Boolean.TRUE);
		if(result) {
			
			return fileName;
		}
		return null;
	}
	
	
	
	
	
	
	/**
	 * 获得文件的后缀名，带.号的。如：".jpg".
	 * @param fileName
	 * @return
	 */
	private static String getSuffix(String fileName) {
		int beginIndex = fileName.lastIndexOf(".");
		if (beginIndex > -1) {
			return fileName.substring(beginIndex);
		}
		return "";
	}
	/**
	 * 获得上传文件路径。
	 * 文件路径的格式是：/testImg/唯一图片ID名。
	 * 如：/testImg/0dsafdas-dfasfdasf-3232dasfd-2323.jpg
	 * @param suffix 文件后缀名。
	 * @return 上传文件路径。
	 */
	private static String getFilePath(String suffix,String path){
		Date now = new Date();
		UUID uuid = UUID.randomUUID();
		StringBuffer fileName = new StringBuffer("/");
		fileName.append(path).append("/")
		.append(uuid.toString()).append(suffix);
		return fileName.toString();
	}
	/**
	 * 删除文件
	 */
	public static void testDeleteFile(String f) {
		// upyun空间下存在的文件的路径
		//filePath = "/testImg/a233c4b5-faa2-406a-9497-7d8680b9f139.jpg";
		
		UpYun upYun  = UpYunFactory.createUpYunForFile();
		// 删除文件
		boolean result = upYun.deleteFile(f);

	}
	public static String readFile(){
		UpYun upYun  = UpYunFactory.createUpYunForFile();
		String readFile = upYun.readFile("testImg");
		return readFile;
	}
	
	
public static void main(String[] args) throws Exception {
	List  list=new ArrayList<>();
	String path = "testImg";
	File image = new File("C:/Users/DL/Pictures/01b767b1-b78d-49c5-9d11-5bb86afe40dd.png");
	FileInputStream is = new FileInputStream(image);
//	BufferedImage bi=ImageIO.read(is);
//	System.out.println("图片宽度"+bi.getHeight());
//	System.out.println("图片高度"+bi.getWidth());
	upload(image,path );
	String readFile = readFile();
	String[] split = readFile.split("\n");
	for (int i = 0; i < split.length; i++) {
		list.add(split[0].substring(0, split[1].indexOf("N")).trim());
	}
}	

}
